"""
@author: Charles Tim Garrocho
@contact: ctgarrocho@gmail.com
@copyright: (C) 2012-2012 Python Software Open Source
"""

from gi.repository import Gtk
from TratadorEventos import *
from datetime import datetime

class JanelaCliente(Gtk.Window):
    
    def __init__(self):
        super(JanelaCliente, self).__init__()
        
        # Criando os elementos.
        self.layout = Gtk.Box(orientation = Gtk.Orientation.VERTICAL, spacing = 0)
        self.painelCentro = Gtk.Box(orientation = Gtk.Orientation.VERTICAL, spacing = 0)
        self.webCam = Gtk.Image()
        self.webCam.set_from_file('default.jpg')

        self.status_bar = Gtk.Statusbar()
        self.context_id = self.status_bar.get_context_id('status')

        self.toolbar = CustomToolbar()
        self.toolbar.set_hexpand(True)
        
        self.botaoIniciar = Gtk.ToolButton(stock_id = Gtk.STOCK_MEDIA_PLAY)
        self.botaoObterImagem = Gtk.ToolButton(stock_id = Gtk.STOCK_GO_DOWN)
        self.botaoSalvarImagem = Gtk.ToolButton(stock_id = Gtk.STOCK_SAVE)
        self.botaoLimparImagem = Gtk.ToolButton(stock_id = Gtk.STOCK_CLEAR)
        self.botaoConfigurar = Gtk.ToolButton(stock_id = Gtk.STOCK_PREFERENCES)
        self.botaoSair = Gtk.ToolButton(stock_id = Gtk.STOCK_QUIT)
        
        # Modificando as configuracoes dos elementos.
        self.botaoIniciar.set_label('Iniciar  ')
        self.botaoObterImagem.set_label('Imagem Atual')
        self.botaoSalvarImagem.set_label('Salvar')
        self.botaoLimparImagem.set_label('Limpar')
        
        self.botaoIniciar.set_is_important(True)
        #self.botaoPausar.set_is_important(True)
        self.botaoObterImagem.set_is_important(True)
        self.botaoSalvarImagem.set_is_important(True)
        self.botaoLimparImagem.set_is_important(True)
        self.botaoConfigurar.set_is_important(True)
        self.botaoSair.set_is_important(True)
        
        self.botaoSalvarImagem.set_sensitive(False)
        self.botaoLimparImagem.set_sensitive(False)
        
        # Adicionando os elementos.
        self.toolbar.insert(self.botaoIniciar, 0)
        self.toolbar.insert(self.botaoObterImagem, 1)
        self.toolbar.insert(self.botaoSalvarImagem, 2)
        self.toolbar.insert(self.botaoLimparImagem, 3)
        self.toolbar.insert(self.botaoConfigurar, 4)
        self.toolbar.insert(Gtk.SeparatorToolItem(), 5)
        self.toolbar.insert(self.botaoSair, 6)
        
        self.painelCentro.pack_start(self.webCam, False, False, 0)
        
        self.layout.pack_start(self.toolbar, False, False, 0)
        self.layout.pack_start(self.painelCentro, False, False, 0)
        self.layout.pack_end(self.status_bar, False, True, 0)
        
        self.add(self.layout)
        
        # Adicionando os eventos.
        self.botaoIniciar.connect('clicked', statusMonitoramento, self)
        self.botaoObterImagem.connect('clicked', obterImagemMonitoramento, self)
        self.botaoSalvarImagem.connect('clicked', salvarImagemMonitoramento, self)
        self.botaoLimparImagem.connect('clicked', limparImagemMonitoramento, self)
        self.botaoConfigurar.connect('clicked', configurarMonitoramento, self)
        self.botaoSair.connect('clicked', sairMonitoramento)
        
        # Configurando a janela
        self.connect('delete_event', sairMonitoramento)
        self.set_size_request(640, 540)
        self.set_resizable(False)
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_title('SEMON - Sensor de Monitoramento de Salas de Servidores')
        self.show_all()
        
        status = verificaStatus()
        if status == Config.EXECUTANDO:
            self.status_bar.push(self.context_id, ' Monitoramento Iniciado')
            self.botaoIniciar.set_stock_id(Gtk.STOCK_MEDIA_PAUSE)
            self.botaoIniciar.set_label('Pausar')
        elif status == Config.PAUSADO:
            self.status_bar.push(self.context_id, ' Monitoramento Pausado')
        else:
            self.botaoObterImagem.set_sensitive(False)
            self.status_bar.push(self.context_id, ' Monitoramento Desligado')
        
    def dialogoAtencao(self, titulo, mensagem):
        self.dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK, titulo)
        self.dialog.set_title('SEMON - Sensor de Monitoramento de Salas de Servidores')
        self.dialog.format_secondary_text(mensagem)
        self.dialog.run()
        self.dialog.destroy()
        
    def janelaEscolhePasta(self):
        dialogo = Gtk.FileChooserDialog('Por Favor Selecione uma Pasta', self, Gtk.FileChooserAction.SELECT_FOLDER, 
                                       (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, 'Salvar', Gtk.ResponseType.OK))
        resposta = dialogo.run()
        if resposta == Gtk.ResponseType.OK:
            resposta = dialogo.get_filename()
        else:
            resposta = None
            
        dialogo.destroy()
        return resposta
    
    def obterHoraAtual(self):
        """
        Retorna um literal com a hora atual para ser utilizada como nome atual da imagem.
        """
        hoje = datetime.now()
        return '{0}-{1}-{2}-{3}-{4}-{5}.jpg'.format(hoje.day, hoje.month, hoje.year, hoje.hour, hoje.minute, hoje.second)
    
class JanelaPreferencias(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self)
        
        painel = Gtk.Box(orientation = Gtk.Orientation.VERTICAL, spacing = 2)
        self.add(painel)
        
        vbox = Gtk.Box(orientation = Gtk.Orientation.HORIZONTAL)
        hbox = Gtk.Box(orientation = Gtk.Orientation.HORIZONTAL)
        tbox = Gtk.Box(orientation = Gtk.Orientation.HORIZONTAL)
        zbox = Gtk.Box(orientation = Gtk.Orientation.HORIZONTAL)

        self.labelEmail = Gtk.Label('  E-Mail')
        vbox.pack_start(self.labelEmail, True, False, 0)
        
        self.entryEmail = Gtk.Entry()
        self.entryEmail.set_size_request(230, 30)
        vbox.pack_start(self.entryEmail, True, False, 0)
        
        painel.pack_start(vbox, True, False, 0)
        
        self.labelSenha = Gtk.Label('  Senha')
        hbox.pack_start(self.labelSenha, True, False, 0)
        
        self.entrySenha = Gtk.Entry()
        self.entrySenha.set_visibility(False)
        self.entrySenha.set_size_request(230, 30)
        hbox.pack_start(self.entrySenha, True, False, 0)
        
        painel.pack_start(hbox, True, False, 0)
        
        self.labelSenha = Gtk.Label('  Nivel')
        tbox.pack_start(self.labelSenha, True, False, 0)
        
        adj2 = Gtk.Adjustment(0.0, 0.0, 100.0, 0.0, 0.0, 0.0)
        scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, adjustment=adj2)
        scale.set_digits(0)
        scale.set_show_fill_level(False)
        scale.set_size_request(230, 30)
        tbox.pack_start(scale, True, False, 0)
        
        painel.pack_start(tbox, True, False, 0)
        
        self.botaoCancelar = Gtk.Button('Cancelar')
        self.botaoCancelar.connect('clicked', self.destroi)
        zbox.pack_start(self.botaoCancelar, True, False, 0)
        self.botaoCancelar.set_size_request(110, 40)
        
        self.botaoGravar = Gtk.Button('Gravar')
        zbox.pack_start(self.botaoGravar, True, False, 0)
        self.botaoGravar.set_size_request(110, 40)
        
        painel.pack_start(zbox, True, False, 0)
        
        self.set_modal(True)
        self.set_resizable(False)
        self.connect('delete_event', self.destroi)
        self.set_size_request(300, 280)
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_title('SEMON - Preferencias')
        self.show_all()
        
    def destroi(self, evento = None):
        self.destroy()
        
class CustomToolbar(Gtk.Toolbar):
    
    def __init__(self):
        super(CustomToolbar, self).__init__()
        ''' Set toolbar style '''
        context = self.get_style_context()
        context.add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)

    def insert(self, item, pos):
        ''' If widget is not an instance of Gtk.ToolItem then wrap it inside one '''
        if not isinstance(item, Gtk.ToolItem):
            widget = Gtk.ToolItem()
            widget.add(item)
            item = widget

        super(CustomToolbar, self).insert(item, pos)
        return item
        
if __name__ == '__main__':
    win = JanelaCliente()
    Gtk.main()